package minijava.Frame;

import minijava.Temp.Label;
import minijava.Temp.Temp;
import java.util.LinkedList;
import java.util.List;

public abstract class Frame
{
    abstract public Frame newFrame(Label name, List<Boolean> formals);

    public Label name;
    public LinkedList<Access> formals;
    //public AccessList formals;
    /*
     * Formals guarda a lista de acessos, ou seja, vai possuir InReg ou InFrame de todas
     * as variaveis passadas por argumento
     */

    public abstract Access allocLocal(boolean escape);
    public abstract int wordSize();
    public abstract Temp FP();
    public abstract Temp RV();
    public abstract Temp R0();
    public abstract minijava.ArvoreIntermediaria.Expr externalCall(String s, List<minijava.ArvoreIntermediaria.Expr> args);
    public abstract Temp[] registers();
    public abstract String tempMap(Temp temp);


}
